gtkplacesview: add a loading property
authorCarlos Soriano <csoriano@gnome.org>
Wed, 19 Aug 2015 12:46:34 +0000 (14:46 +0200)
committerCarlos Soriano <csoriano@gnome.org>
Fri, 21 Aug 2015 11:29:21 +0000 (13:29 +0200)
So clients of the view can know if the view is busy.

https://bugzilla.gnome.org/show_bug.cgi?id=753786

gtk/gtkplacesview.c
gtk/gtkplacesviewprivate.h

index f4369b605fbab6672df24181feaf3e6daa65d946..deece3e3a026e28868277284fb31570c07ee5dd8 100644 (file)
@@ -84,6 +84,7 @@ struct _GtkPlacesViewPrivate
   guint                          entry_pulse_timeout_id;
   guint                          connecting_to_server : 1;
   guint                          fetching_networks : 1;
+  guint                          loading : 1;
 };
 
 static void        mount_volume                                  (GtkPlacesView *view,
@@ -106,6 +107,7 @@ enum {
   PROP_0,
   PROP_LOCAL_ONLY,
   PROP_OPEN_FLAGS,
+  PROP_LOADING,
   LAST_PROP
 };
 
@@ -410,6 +412,10 @@ gtk_places_view_get_property (GObject    *object,
       g_value_set_boolean (value, gtk_places_view_get_local_only (self));
       break;
 
+    case PROP_LOADING:
+      g_value_set_boolean (value, gtk_places_view_get_loading (self));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -965,6 +971,9 @@ network_enumeration_next_files_finished (GObject      *source_object,
     /* avoid to update widgets if the operation was cancelled in finalize */
     if (priv->listbox != NULL)
       update_network_state (view);
+
+  priv->loading = FALSE;
+  g_object_notify_by_pspec (G_OBJECT (view), properties[PROP_LOADING]);
 }
 
 static void
@@ -1045,6 +1054,9 @@ update_places (GtkPlacesView *view)
   priv->network_placeholder = NULL;
   priv->network_header_spinner = NULL;
 
+  priv->loading = TRUE;
+  g_object_notify_by_pspec (G_OBJECT (view), properties[PROP_LOADING]);
+
   /* Add "Computer" row */
   file = g_file_new_for_path ("/");
   icon = g_themed_icon_new_with_default_fallbacks ("drive-harddisk");
@@ -2156,6 +2168,13 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass)
                                 FALSE,
                                 G_PARAM_READWRITE);
 
+  properties[PROP_LOADING] =
+          g_param_spec_boolean ("loading",
+                                P_("Loading"),
+                                P_("Whether the view is loading locations"),
+                                FALSE,
+                                G_PARAM_READABLE);
+
   properties[PROP_OPEN_FLAGS] =
           g_param_spec_flags ("open-flags",
                               P_("Open Flags"),
@@ -2333,6 +2352,26 @@ gtk_places_view_set_search_query (GtkPlacesView *view,
     }
 }
 
+/**
+ * gtk_places_view_get_loading:
+ * @view: a #GtkPlacesView
+ *
+ * Returns %TRUE if the view is loading locations.
+ *
+ * Since: 3.18
+ */
+gboolean
+gtk_places_view_get_loading (GtkPlacesView *view)
+{
+  GtkPlacesViewPrivate *priv;
+
+  g_return_val_if_fail (GTK_IS_PLACES_VIEW (view), FALSE);
+
+  priv = gtk_places_view_get_instance_private (view);
+
+  return priv->loading;
+}
+
 /**
  * gtk_places_view_get_local_only:
  * @view: a #GtkPlacesView
index 17f55fd3a7a35619938d3135035856cdf7dd6a4b..00eab9377155f45de01a513a010c8b79239138d0 100644 (file)
@@ -85,6 +85,9 @@ GDK_AVAILABLE_IN_3_18
 void               gtk_places_view_set_local_only                (GtkPlacesView         *view,
                                                                   gboolean               local_only);
 
+GDK_AVAILABLE_IN_3_18
+gboolean           gtk_places_view_get_loading                   (GtkPlacesView         *view);
+
 GDK_AVAILABLE_IN_3_18
 GtkWidget *        gtk_places_view_new                           (void);